const path = require('path')
const CompressionWebpackPlugin = require("compression-webpack-plugin"); // 开启gzip压缩， 按需引用
const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i; // 开启gzip压缩， 按需写入
const BundleAnalyzerPlugin = require("webpack-bundle-analyzer").BundleAnalyzerPlugin; // 打包分析
const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV);
const resolve = dir => {
  return path.join(__dirname, dir)
}
module.exports = {
  productionSourceMap:false,// 生产环境的 source map 去掉打包的时候生成的map文件
  lintOnSave:false,// 是否在开发环境下通过 eslint-loader 在每次保存时 lint 代码
  runtimeCompiler: true,// 是否使用包含运行时编译器的 Vue 构建版本
  outputDir: process.env.outputDir || 'dist', // 'dist', 生产环境构建文件的目录
  parallel: require("os").cpus().length > 1, // 是否为 Babel 或 TypeScript 使用 thread-loader。该选项在系统的 CPU 有多于一个内核时自动启用，仅作用于生产构建
  devServer: {
    compress: true,
    disableHostCheck: true,
    open: process.platform === 'darwin',
    host: 'localhost',
    port: 8080,
    https: false,
    hotOnly: false,
    proxy: {
      '/api/v1': {
        //39.97.178.218
        target: 'http://47.98.147.52:3000/api/v1',
        changeOrigin: true,
        ws:true,
        pathRewrite: {
          '^/api/v1': '',
        }
      }
    } // 设置代理
  },
   publicPath: './',
  chainWebpack: config => {
    config.resolve.symlinks(true); // 修复热更新失效
    // 如果使用多页面打包，使用vue inspect --plugins查看html是否在结果数组中
    config.plugin("html").tap(args => {
      // 修复 Lazy loading routes Error
      args[0].title = '数据'
      args[0].chunksSortMode = "none";
      return args;
  });
    config.resolve.alias
      .set('_c', resolve('src/components')) // key,value自行定义，比如.set('@@', resolve('src/components'))
      // 移除 prefetch 插件
      config.plugins.delete('prefetch')
      // 移除 preload 插件
      config.plugins.delete('preload');
       // 打包分析
        // 打包之后自动生成一个名叫report.html文件(可忽视)
        if (IS_PROD) {
          config.plugin("webpack-report").use(BundleAnalyzerPlugin, [
              {
                  analyzerMode: "static"
              }
          ]);
      }
  },
  

  // 使用 terser 压缩
    // 需要安装 cnpm install terser-webpack-plugin --save-dev
    configureWebpack: (config) => {
      if (process.env.NODE_ENV === 'production') {
        config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true
        config.optimization.minimizer[0].options.terserOptions.compress.pure_funcs = ['console.log']
    }
      // 开启 gzip 压缩
        // 需要 npm i -D compression-webpack-plugin
        const plugins = [];
        if (IS_PROD) {
          plugins.push(
              new CompressionWebpackPlugin({
                  filename: "[path].gz[query]",
                  algorithm: "gzip",
                  test: productionGzipExtensions,
                  threshold: 10240,
                  minRatio: 0.8
              })
          );
      }
      config.plugins = [...config.plugins, ...plugins];
      
  },
}
